home *** CD-ROM | disk | FTP | other *** search
/ Aminet 6 / Aminet 6 - June 1995.iso / Aminet / dev / obero / AmBoSLibOberon.lha / AmbosLibOberon.mod < prev    next >
Encoding:
Text File  |  1995-02-26  |  21.9 KB  |  415 lines

  1. (******************************************************************************)
  2. (* Modulname  : AmbosLib_Oberon                                               *)
  3. (* Version    : v1.000 (beta)                                                 *)
  4. (* Datum      : 05.11.1994                                                    *)
  5. (* Autor      : Andreas Leicht                                                *)
  6. (* Adresse    : Seefahrerstr. 5                                               *)
  7. (*            : 27721 Ritterhude                                              *)
  8. (* Telefon    : 0421 / 63 79 76                                               *)
  9. (* EMail      : Andi@doom.gun.de                                              *)
  10. (* Copyright  : Andreas Leicht © 05.11.1994                                   *)
  11. (* Sprache    : Oberon 2                                                      *)
  12. (* Compiler   : Amiga Oberon v3.20d                                           *)
  13. (******************************************************************************)
  14.  
  15. (******************************************************************************)
  16. (* Geschichte : v1.000 (beta) - 05.11.1994 - AO v3.20d                        *)
  17. (*            : Erste Umsetzung                                               *)
  18. (******************************************************************************)
  19.  
  20. MODULE AmbosLibOberon;
  21.  
  22. IMPORT  exe * :=  Exec,
  23.         dos * :=  Dos,
  24.         int * :=  Intuition,
  25.         sys * :=  SYSTEM;
  26.  
  27. TYPE
  28.   externInfoPtr       * = UNTRACED POINTER TO externInfo;
  29.   transferNodePtr     * = UNTRACED POINTER TO transferNode;
  30.   userDatenExternPtr  * = UNTRACED POINTER TO userDatenExternPtr;
  31.   fileExternPtr       * = UNTRACED POINTER TO fileExtern;
  32.   brettDatenExternPtr * = UNTRACED POINTER TO brettDatenExtern;
  33.   bbsMenuPtr          * = UNTRACED POINTER TO bbsMenu;
  34.  
  35.   STRING30            * = UNTRACED POINTER TO ARRAY  30 OF CHAR;
  36.   STRING40            * = UNTRACED POINTER TO ARRAY  40 OF CHAR;
  37.   STRING42            * = UNTRACED POINTER TO ARRAY  42 OF CHAR;
  38.   STRING50            * = UNTRACED POINTER TO ARRAY  50 OF CHAR;
  39.   STRING60            * = UNTRACED POINTER TO ARRAY  60 OF CHAR;
  40.   STRING100           * = UNTRACED POINTER TO ARRAY 100 OF CHAR;
  41.  
  42. CONST
  43.   bbsName       * = "BBS.library";
  44.   bbsVersion    * = 1;
  45.  
  46. (******************************************************************************)
  47. (*                                                                            *)
  48. (******************************************************************************)
  49. CONST
  50.   up            * = 6;
  51.   down          * = 3;
  52.   left          * = 4;
  53.   right         * = 5;
  54.   delete        * = 7;
  55.   backspace     * = 8;
  56.   return        * = 13;
  57.  
  58. (******************************************************************************)
  59. (* Werte für StartetFrom in der ExternInfo Struktur                           *)
  60. (******************************************************************************)
  61. CONST
  62.   fromAMenu           * = 0;            (* Programm wurd von der GeoNeto- oder        *)
  63.                                         (* AmBoS-Menu-Oberfläche gestartet            *)
  64.   fromNachLogin       * = 1;            (* Batchdatei                                 *)
  65.   fromGastLogin       * = 2;            (* Batchdatei                                 *)
  66.   fromVorAntrag       * = 3;            (* Batchdatei                                 *)
  67.   fromNachAntrag      * = 4;            (* Batchdatei                                 *)
  68.   fromVorDownLoad     * = 5;            (* Batchdatei                                 *)
  69.   fromNachDownLoad    * = 6;            (* Batchdatei                                 *)
  70.   fromVorUpLoad       * = 7;            (* Batchdatei                                 *)
  71.   fromNachUpLoad      * = 8;            (* Batchdatei                                 *)
  72.   fromLogoff          * = 9;            (* Batchdatei                                 *)
  73.   fromRelogin         * = 10;           (* Batchdatei                                 *)
  74.   fromSetup           * = 11;           (* Dieser Modus ist noch nicht implementiert, *)
  75.                                         (* er soll dazu verwendet werden, konfor-     *)
  76.                                         (* tables Setup für Externe dem Sysop zur     *)
  77.                                         (* Verfügunug stellen                         *)
  78.                                         (* Sollte dieser Modus auftauchen das         *)
  79.                                         (* Programm am besten sofort beenden          *)
  80.  
  81. (******************************************************************************)
  82. (* Werte für Language in der ExternInfo-Struktur                              *)
  83. (******************************************************************************)
  84. CONST
  85.   languageDeutsch     * = 0;
  86.   languageEnglish     * = 1;
  87.  
  88. (******************************************************************************)
  89. (* Werte für DateFormat in der ExternInfo-Struktur                            *)
  90. (******************************************************************************)
  91. CONST
  92.   dateFormatCDN       * = 0; (* Tag-Monat-Jahr *)
  93.   dateFormatUSA       * = 1; (* Monat-Tag-Jahr *)
  94.  
  95. (******************************************************************************)
  96. (* Werte für tr_Type in der TransferNode-Struktur                             *)
  97. (******************************************************************************)
  98. CONST
  99.   transferUpLoad      * = 1;
  100.   transferDownLoad    * = 2;
  101.  
  102. (******************************************************************************)
  103. (* Filetyen                                                                   *)
  104. (******************************************************************************)
  105. CONST
  106.   fileTypeMessage     * = 1;
  107.   fileTypeBin         * = 2;
  108.  
  109. (******************************************************************************)
  110. (* Bretttypen                                                                 *)
  111. (******************************************************************************)
  112. CONST
  113.   brettTypeNoBrett    * = 0;
  114.   brettTypeAsc        * = 1;
  115.   brettTypeBin        * = 2;
  116.   brettTypeAscBin     * = 3;
  117.   brettTypeHead       * = 4;
  118.   brettTypeExtern     * = 5;
  119.   brettTypePm         * = 6;
  120.  
  121. (******************************************************************************)
  122. (* Eine ExternInfo-Struktur. Wird von der Funktion bbs_open() zurückgegeben   *)
  123. (******************************************************************************)
  124. TYPE
  125.   externInfo * = STRUCT
  126.     conOnly           * : BOOLEAN;      (* Wenn ConLogin ungleich 0               *)
  127.     startedFrom       * : LONGINT;      (* Hier kann man entnehmen, von wo das    *)
  128.                                         (* Programm gestartet wurde               *)
  129.     userName          * : exe.STRPTR;   (* Name des Users                         *)
  130.     city              * : exe.STRPTR;   (* Wohnort des Users                      *)
  131.     loginTime         * : dos.Date;     (* Zeitpunkt des Logins                   *)
  132.     totalDownLoads    * : LONGINT;      (* Download Bytes des Users               *)
  133.     totalUpLoads      * : LONGINT;      (* Upload Bytes des Users                 *)
  134.     baudRate          * : LONGINT;      (* BaudRate des Connects                  *)
  135.     lines             * : LONGINT;      (* Anzahl der Zeilen des Users            *)
  136.  
  137.     callsToday        * : LONGINT;      (* Anzahl der Anrufe heute in der Box     *)
  138.     callsTotal        * : LONGINT;      (* Anzahl der gesammten Anrufe in der Box *)
  139.     lastCallNr        * : LONGINT;      (* Nummer des letzten Anrufes vom User    *)
  140.                                         (* in der Box                             *)
  141.     callNr            * : LONGINT;      (* Aktuelle Anrufnummer                   *)
  142.  
  143.     transferListe     * : exe.List;     (* Liste der Up- bzw. Downgelodeten       *)
  144.                                         (* Files wenn das Programm aus der        *)
  145.                                         (* Nachupload- oder Nachdownload-Batch    *)
  146.                                         (* gestartet wurde                        *)
  147.     autoLogOff        * : INTEGER;      (* Ist dieser Wert ungleich NULL befinde  *)
  148.                                         (* sich der User in einer Autologoff-     *)
  149.                                         (* Sequenze, d.h. Eingabeaufforderungen   *)
  150.                                         (* sind tunlichst zu unterlassen... ;-)   *)
  151.     dateFormat        * : INTEGER;      (* Das bevorzugte Datumsformat des Users  *)
  152.     coSysop           * : INTEGER;      (* Wenn ungleich NULL ist der User Sysop  *)
  153.                                         (* oder CoSysop                           *)
  154.     ambosVersion      * : INTEGER;      (* AmBoS Version                          *)
  155.     ambosRevision     * : INTEGER;      (* AmBoS Revision                         *)
  156.     ambosSerialNumber * : LONGINT;      (* Seriennummer oder 0 für DEMO-Version   *)
  157.   END;
  158.  
  159. (******************************************************************************)
  160. (* Nodes in der ExternInfo-Struktur->TransferListe                            *)
  161. (******************************************************************************)
  162. TYPE
  163.   transferNode * = STRUCT
  164.     trSucc            * : transferNodePtr;
  165.     trPrev            * : transferNodePtr;
  166.     trType            * : sys.BYTE;       (* Art der Übertragung Up oder Download     *)
  167.     trPri             * : sys.BYTE;
  168.     trName            * : exe.STRPTR;     (* Names des Files                          *)
  169.     trRealName        * : exe.STRPTR;     (* Name unter dem das File auf dem          *)
  170.                                           (* Datenträger zu finden ist                *)
  171.     trBoxPath         * : exe.STRPTR;     (* Kompletter Brettpfad                     *)
  172.     trDosPath         * : exe.STRPTR;     (* Pfad unter dem das File auf dem          *)
  173.                                           (* Datenträger zu finden ist                *)
  174.     trUpLoader        * : exe.STRPTR;     (* Der Uploader des Files                   *)
  175.     trSize            * : LONGINT;        (* Länge des Files in Bytes                 *)
  176.     trCps             * : LONGINT;        (* CPS_Rate bei der Übertragung             *)
  177.     trAnzDownLoads    * : LONGINT;        (* Wie oft das File schon downgelodet wurde *)
  178.     trProtectedBoard  * : LONGINT;        (* File liegt in einem durch Zugangsgruppe  *)
  179.                                           (* geschützten Pfad                         *)
  180. END;
  181.  
  182. (******************************************************************************)
  183. (*                                                                            *)
  184. (******************************************************************************)
  185. TYPE
  186.   userDatenExtern * = STRUCT
  187.     ambosPrivat * : exe.APTR;
  188.     userName    * : STRING30;
  189.     firstName   * : STRING50;
  190.     name        * : STRING50;
  191.     city        * : STRING100;
  192.     street      * : STRING60;
  193.     phoneNr     * : STRING30;
  194.     fax         * : STRING30;
  195.     modem       * : STRING30;
  196.     computer    * : STRING30;
  197.     substitute  * : STRING30; (* Vertreter *)
  198.     dlProtocol  * : STRING30;
  199.     packer      * : STRING30;
  200.  
  201.     birthYear   * : INTEGER;
  202.     birthMonth  * : INTEGER;
  203.     birthDay    * : INTEGER;
  204.     lastLogin   * : LONGINT; (* In Minuten seid dem 01.01.1978 *)
  205.     newsDate    * : LONGINT; (* IN Minuten seid dem 01.01.1978 *)
  206.     firstLogin  * : LONGINT; (* In Minuten seid dem 01.01.1978 *)
  207.  
  208.     dlFreeSpace * : LONGINT;
  209.     upLoads     * : LONGINT;
  210.     downLoads   * : LONGINT;
  211.  
  212.     lastCall    * : LONGINT;
  213.  
  214.     onlineTime  * : INTEGER;
  215.     onlineToday * : INTEGER;
  216.     lines       * : INTEGER;
  217.     zone        * : INTEGER;
  218.     upDownRatio * : INTEGER;
  219.     maxPmMails  * : INTEGER;
  220.  
  221.     numCrashes  * : INTEGER;
  222.     numLogins   * : INTEGER;
  223. END;
  224.  
  225. (******************************************************************************)
  226. (* Eine FileExtern-Struktur                                                   *)
  227. (******************************************************************************)
  228. TYPE
  229.   fileExtern * = STRUCT
  230.     ambosPrivat   * : exe.APTR;
  231.  
  232.     number        * : LONGINT;    (* Nummer des Files im Brett            *)
  233.     delete        * : INTEGER;    (* kann gesetzt werden                  *)
  234.     markiert      * : INTEGER;    (* Eintrag ist markiert                 *)
  235.  
  236.     fileType      * : INTEGER;    (* File oder Mail                       *)
  237.     brettType     * : INTEGER;    (* Art des aktuellen Brettes            *)
  238.     downLoads     * : INTEGER;    (* Anzahl der Zugriffe auf den Eintrag  *)
  239.     upLoadDate    * : LONGINT;    (* in Minuten seit dem 01.01.1978       *)
  240.     createDate    * : LONGINT;    (* in Minuten seit dem 01.01.1978       *)
  241.     size          * : LONGINT;    (* Länge von Binärfiles                 *)
  242.     lines         * : LONGINT;    (* Anzahl der Zeilen bei Mails          *)
  243.  
  244.     upLoader      * : exe.STRING; (* Name des Uploaders                   *)
  245.     realName      * : exe.STRING; (* Name unter dem das File auf der      *)
  246.                                   (* Platte zu finden ist                 *)
  247.     boxPath       * : exe.STRING; (* Brettpfad                            *)
  248.     dosPath       * : exe.STRING; (* Dospfad des aktuellen Brettes        *)
  249.  
  250.     readMeFile    * : STRING42;
  251.     boxName       * : STRING42;
  252.     comment       * : STRING50;
  253. END;
  254.  
  255. (******************************************************************************)
  256. (* Eine BrettDatenExtern-Struktur                                             *)
  257. (******************************************************************************)
  258. TYPE
  259.   brettDatenExtern * = STRUCT
  260.     ambosPrivat     * : exe.APTR;
  261.  
  262.     brettName       * : STRING40;
  263.     brettPfad       * : exe.STRING;
  264.  
  265.     schreibGruppe   * : STRING40;
  266.     zugangsGruppe   * : STRING40;
  267.     leseGruppe      * : STRING40;
  268.     verwalter       * : STRING40;
  269.     brettPasswort   * : STRING40;
  270.  
  271.     letzterEintrag  * : LONGINT;
  272.     brettFlags      * : LONGINT;
  273.     brettTyp        * : exe.BYTE;
  274.     locked          * : exe.BYTE;
  275.     area            * : exe.BYTE;
  276.     noRatio         * : exe.BYTE;
  277. END;
  278.  
  279. (******************************************************************************)
  280. (* Datenstruktur für bbs_menu()                                               *)
  281. (******************************************************************************)
  282. TYPE
  283.   bbsMenu * = STRUCT
  284.     next      * : exe.APTR;
  285.     name      * : exe.APTR;
  286.     menuID    * : LONGINT;    (* Niemals auf 0 setzen !       *)
  287.     private1  * : LONGINT;    (* Immer mit 0 initialisieren ! *)
  288.     private2  * : SHORTINT;   (* Immer mit 0 initialisieren ! *)
  289.   END;
  290.  
  291. (******************************************************************************)
  292. (*                                                                            *)
  293. (******************************************************************************)
  294. VAR
  295.  bbs                      * : exe.LibraryPtr;
  296.  base                     * : exe.LibraryPtr;
  297.  
  298. (******************************************************************************)
  299. (* bbs_Private1            - nicht dokumentierte Funktion                     *)
  300. (* bbs_Private2            - nicht dokumentierte Funktion                     *)
  301. (* bbs_Open                - Anmelden des externen Programmes am Port         *)
  302. (* bbs_Close               - Abmelden des externen Programmes bei Port        *)
  303. (* bbs_PutS                - einen String ausgeben                            *)
  304. (* bbs_GetS                - einen String einlesen                            *)
  305. (* bbs_SGetS               - liest einen nicht sichtbaren String ein          *)
  306. (* bbs_Private3            - nicht dokumentierte Funktion                     *)
  307. (* bbs_GetC                - liest ein Zeichen ein                            *)
  308. (* bbs_FGetC               - liest ein gefiltertes Zeichen ein                *)
  309. (* bbs_Menu                - baut ein horizontales Cursor-Shortcut-Menü auf   *)
  310. (* bbs_Graphic             - zeigt eine ANSI-Datei an                         *)
  311. (* bbs_Text                - zeigt eine Text-Datei an                         *)
  312. (* bbs_Private4            - nicht dokumentierte Funktion                     *)
  313. (* bbs_RPutS               -                                                  *)
  314. (* bbs_Private5            - nicht dokumentierte Funktion                     *)
  315. (* bbs_Private6            - nicht dokumentierte Funktion                     *)
  316. (* bbs_Private7            - nicht dokumentierte Funktion                     *)
  317. (* bbs_WGetC               - liest ein Zeichen ein                            *)
  318. (* bbs_WFGetC              - liest ein gefiltertes Zeichen ein                *)
  319. (* bbs_Private8            - nicht dokumentierte Funktion                     *)
  320. (* bbs_Private9            - nicht dokumentierte Funktion                     *)
  321. (* bbs_Private10           - nicht dokumentierte Funktion                     *)
  322. (* bbs_PrintF              - formatierte Ausgabe (wie dos.PrintF)             *)
  323. (* bbs_WGetS               -                                                  *)
  324. (* bbs_Private11           - nicht dokumentierte Funktion                     *)
  325. (* bbs_LookC               - lesen eines Zeichen (asynchron)                  *)
  326. (* bbs_FirstUser           - Userdaten des ersten Users auslesen              *)
  327. (* bbs_NextUser            - weitere Userdaten lesen                          *)
  328. (* bbs_ObtainName          - belegen eines Names                              *)
  329. (* bbs_ReleaseName         - freigeben eines Names                            *)
  330. (* bbs_LoadUserData        - auslesen von Userdaten                           *)
  331. (* bbs_SaveUserData        - speichern von Userdaten                          *)
  332. (* bbs_FreeUserData        - Userdaten freigeben                              *)
  333. (* bbs_MailToUser          - Nachricht an einen User schreiben                *)
  334. (* bbs_MailToBrett         - Nachricht in ein Brett schreiben                 *)
  335. (* bbs_GetBrettType        - Bretttyp feststellen                             *)
  336. (* bbs_FirstBrettInhalt    - Brettdaten auslesen                              *)
  337. (* bbs_NextBrettInhalt     - Brettinhalt weiterlesen                          *)
  338. (* bbs_BrettInhaltByNumber - bestimmten Brettinhalt lesen                     *)
  339. (* bbs_FreeBrettInhalt     - Brettinhalt freigeben                            *)
  340. (* bbs_SaveBrettInhalt     - Brettinhalt speichern                            *)
  341. (******************************************************************************)
  342.  
  343. PROCEDURE Private1        *{bbs,- 30};
  344. PROCEDURE Private2        *{bbs,- 36};
  345. PROCEDURE Open            *{bbs,- 42}(port{9}          : ARRAY OF CHAR): externInfoPtr;
  346. PROCEDURE Close           *{bbs,- 48};
  347. PROCEDURE PutS            *{bbs,- 54}(string{9}        : ARRAY OF CHAR);
  348. PROCEDURE GetS            *{bbs,- 60}(deposid{9}       : ARRAY OF CHAR;
  349.                                       maxChars{1}      : LONGINT;
  350.                                       mode{2}          : LONGINT): INTEGER;
  351.  
  352. PROCEDURE SGetS           *{bbs,- 66}(deposid{9}       : ARRAY OF CHAR;
  353.                                       maxChars{10}     : LONGINT;
  354.                                       mode{11}         : LONGINT): INTEGER;
  355. PROCEDURE Private3        *{bbs,- 72};
  356. PROCEDURE GetC            *{bbs,- 78}(): CHAR;
  357. PROCEDURE FGetC           *{bbs,- 84}(): CHAR;
  358. PROCEDURE Menu            *{bbs,- 90}(menuDaten{9}     : bbsMenuPtr): LONGINT;
  359. PROCEDURE Graphic         *{bbs,- 96}(fileName{9}      : ARRAY OF CHAR);
  360. PROCEDURE Text            *{bbs,-102}(fileName{9}      : ARRAY OF CHAR);
  361. PROCEDURE Private4        *{bbs,-108};
  362. PROCEDURE RPutS           *{bbs,-114}(string{9}        : ARRAY OF CHAR);
  363. PROCEDURE Private5        *{bbs,-120};
  364. PROCEDURE Private6        *{bbs,-126};
  365. PROCEDURE Private7        *{bbs,-132};
  366. PROCEDURE WGetC           *{bbs,-138}(waitBits{1}      : LONGINT): CHAR;
  367. PROCEDURE WFGetC          *{bbs,-144}(waitBits{1}      : LONGINT): CHAR;
  368. PROCEDURE Private8        *{bbs,-150};
  369. PROCEDURE Private9        *{bbs,-156};
  370. PROCEDURE Private10       *{bbs,-162};
  371. PROCEDURE PrintF          *{bbs,-168}(string{9}        : ARRAY OF CHAR;
  372.                                       arg1{10}..       : exe.APTR);
  373. PROCEDURE WGetS           *{bbs,-174};
  374. PROCEDURE Private11       *{bbs,-180};
  375. PROCEDURE LookC           *{bbs,-186}(): SHORTINT;
  376. PROCEDURE FirstUser       *{bbs,-192}(): userDatenExternPtr;
  377. PROCEDURE NextUser        *{bbs,-198}(userDaten{9}     : userDatenExternPtr): userDatenExternPtr;
  378. PROCEDURE ObtainName      *{bbs,-204}(string{9}        : ARRAY OF CHAR);
  379. PROCEDURE ReleaseName     *{bbs,-210}(string{9}        : ARRAY OF CHAR);
  380. PROCEDURE LoadUserData    *{bbs,-216}(name{9}          : ARRAY OF CHAR): userDatenExternPtr;
  381. PROCEDURE SaveUserData    *{bbs,-222}(userDaten{9}     : userDatenExternPtr);
  382. PROCEDURE FreeUserData    *{bbs,-228}(userDaten{9}     : userDatenExternPtr);
  383. PROCEDURE MailToUser      *{bbs,-234}(userName{9}      : ARRAY OF CHAR;
  384.                                       absender{1}      : ARRAY OF CHAR;
  385.                                       betreff{2}       : ARRAY OF CHAR;
  386.                                       textFile{10}     : ARRAY OF CHAR);
  387. PROCEDURE MailToBrett     *{bbs,-240}(userName{9}      : ARRAY OF CHAR;
  388.                                       absender{1}      : ARRAY OF CHAR;
  389.                                       betreff{2}       : ARRAY OF CHAR;
  390.                                       textFile{10}     : ARRAY OF CHAR);
  391. PROCEDURE GetBrettType     *{bbs,-246}(): LONGINT;
  392. PROCEDURE FirstBrettInhalt *{bbs,-252}(): fileExternPtr;
  393. PROCEDURE NextBrettInhalt  *{bbs,-258}(fileExtern{9}   : fileExternPtr);
  394. PROCEDURE BrettInhaltByNumber *{bbs,-264}(number{1}    : LONGINT): fileExternPtr;
  395. PROCEDURE FreeBrettInhalt     *{bbs,-270}(fileExtern{9} : fileExternPtr);
  396. PROCEDURE SaveBrettInhalt     *{bbs,-276}(fileExtern{9} : fileExternPtr);
  397.  
  398. (* $OvflChk- $RangeChk- $StackChk- $NilChk- $ReturnChk- $CaseChk- *)
  399.  
  400. BEGIN
  401.   bbs :=   exe.OpenLibrary(bbsName,bbsVersion);
  402.  
  403.   IF bbs = NIL THEN
  404.     sys.SETREG(0,int.DisplayAlert(0,"\x00\x64\x14missing bbs.library V1.1\o\o",50));
  405.     HALT(0);
  406.   END;
  407.  
  408.   base := bbs;
  409.  
  410. CLOSE
  411.   IF bbs#NIL THEN exe.CloseLibrary(bbs) END;
  412.  
  413. END AmbosLibOberon.
  414.  
  415.